home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fatted Calf
/
The Fatted Calf.iso
/
Applications
/
Audio
/
Patchmix
/
Source
/
Rand.m
< prev
next >
Wrap
Text File
|
1992-08-01
|
4KB
|
178 lines
/* Generated by Interface Builder */
#import "Rand.h"
#import "Instrum.h"
#import <appkit/graphics.h>
#import "Statement.h"
@implementation Rand
+ initialize
{
image = [NXImage findImageNamed:"Rand"];
ampOffset.x = 30;
ampOffset.y = 52;
outOffset.x = 30;
outOffset.y = 8;
return self;
}
- init
{
written = NO;
size.width = 80.;
size.height = 80.;
center.x = size.width/2.;
center.y = size.height/2.;
strcpy(type,"Rand");
strcpy(name,"rrand");
amp = [[Param alloc] init:self :&Offset];
out = [[Param alloc] init:self :&outOffset];
[amp setTitle:"Amp:"];
[out setTitle:"Out:"];
paramList = [[List alloc] initCount:4];
[paramList addObject:amp];
[paramList addObject:out];
[Inst putUgenInList:self];
return self;
}
- remove
{
id cp,param;
int i;
// make sure not connected first
for(i = 0; i < ([paramList count]); i++) {
param = [paramList objectAt:i];
if(cp = [param getConnectedParam])
return 0;
}
// remove ugen from list
[Inst removeUgenFromList:self];
return self;
}
- (NXImage *)getImage
{
return image;
}
- move:(NXPoint *)newloc
{
location = *newloc;
[amp move:&location];
[out move:&location];
return self;
}
- findParamAtPoint:(NXPoint *)point
{
NXRect *rect;
int i;
id param;
for(i = 0; i < [paramList count]; i++) {
param = [paramList objectAt:i];
rect = [param getRect];
if(NXMouseInRect(point,rect,NO))
return param;
}
//printf("no param found\n");
return nil;
}
- writeUgen
{
/* for amp param:
see if there is input ugen
if so, grab the output (ug?) and multiply it by this
param value
if not just use the param value
after all params done, write relevant code into lists
(declarations, assignments and loop statements)
i.e. ug? = oscil(,,,,);
go to output param connected ugen and call its "writeUgen"
*/
BOOL rm;
char ampVar[10];
int i;
int parent[3];
id param;
id ug;
id nupar;
char str[50];
char par[20];
//printf("writing ugen %d\n",index);
sprintf(str,"\tfloat ug%d;\n",index);
[Inst putVarInList:str];
sprintf(str,"\tfloat amp%d;\n",index);
[Inst putVarInList:str];
sprintf(str,"\tfloat out%d;\n",index);
[Inst putVarInList:str];
for(i = 0; i < ([paramList count]-1); i++) {
param = [paramList objectAt:i];
if(nupar = [param getConnectedParam]) {
ug = [nupar getUgen];
if([ug getWritten] == NO) {
parent[i] = [[ug writeUgen] getIndex];
}
else {
parent[i] = 0;
}
//printf("parent[%d] = %d\n",i,parent[i]);
}
else
parent[i] = 0;
}
if(parent[0]) { // amplitude input ugen
//printf("input ugen to rand amp \n");
rm = YES;
sprintf(str,"\t\tamp%d = %.2f;\n",index,
atof([[paramList objectAt:0] getValue]));
[Inst putLoopInList:str];
sprintf(str,"\tfloat amprm%d;\n",index);
[Inst putVarInList:str];
sprintf(str,"\t\tamprm%d = amp%d * ug%d;\n",index,
index,parent[0]);
[Inst putLoopInList:str];
}
else { // amp preset or default
rm = NO;
//printf("amp preset or default\n");
sprintf(str,"\tamp%d = %.2f;\n",index,atof([[paramList objectAt:0] getValue]));
[Inst putAssignInList:str];
}
if(rm)
sprintf(ampVar,"amprm%d",index);
else
sprintf(ampVar,"amp%d",index);
// output amplitude multiplier:
strcpy(par,[[paramList objectAt:1] getValue]);
if(par[0] == 'p' && par[1] == '[')
sprintf(str,"\tout%d = %s;\n",index,par);
else
sprintf(str,"\tout%d = %.2f;\n", index, atof([[paramList objectAt:1] getValue]));
[Inst putAssignInList:str];
sprintf(str,"\t\tug%d = %s()*%s*out%d;\n", index, name, ampVar, index);
[Inst putLoopInList:str];
written = YES;
return self;
}
@end